package com.lan.script;


import com.lan.model.Type;
import com.lan.model.symbol.Function;
import com.lan.model.symbol.Scope;
import com.lan.model.symbol.Variable;

import java.util.Map;

/**
 * 存放一个函数运行时的本地变量的值，包括参数的值。
 */
public class FunctionObject extends ScriptObject {

    //类型
    private Function function;

    /**
     * 接收者所在的scope。缺省是function的enclosingScope，也就是词法的Scope。
     * 当赋值给一个函数型变量的时候，要修改receiverEnclosingScope等于这个变量的scope。
     */
    private Variable variable;

    public FunctionObject(Function function) {
        this.function = function;
    }

    public void setFunction(Function function) {
        this.function = function;
    }

    public Function getFunction() {
        return function;
    }

    public Scope getScope() {
        return variable.getScope();
    }

    public Variable getVariable() {
        return variable;
    }

    public void setVariable(Variable variable) {
        this.variable = variable;
    }

    @Override
    public Type getType() {
        return function;
    }

    @Override
    public Object getValue() {
        return function;
    }
}